package com.esunny.resourcevisualization.controller;

import com.esunny.resourcevisualization.domain.entity.ResourceTypeEntity;
import com.esunny.resourcevisualization.domain.request.PageData;
import com.esunny.resourcevisualization.domain.request.QueryEntityListDto;
import com.esunny.resourcevisualization.domain.response.ReturnStructure;
import com.esunny.resourcevisualization.service.ResourceTypeEntityService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @version 1.0.0.0
 * @ClassName ResourceTypeEntityController
 * @Description 资源类别实体控制层代码
 * @Author baochencong
 * @Date 2020/10/9 10:00
 */
@Controller
@RequestMapping("/resource")
public class ResourceTypeEntityController {

    @Resource
    private ResourceTypeEntityService resourceTypeEntityService;

    private static Logger LOGGER = LoggerFactory.getLogger(ResourceTypeEntityController.class);

    /**
     * 添加资源类别实体
     *
     * @param resourceTypeEntity 资源类别实体信息
     * @return 添加结果信息
     */
    @ResponseBody
    @PostMapping("/addResourceTypeEntity")
    public ReturnStructure addResourceTypeEntity(@RequestBody ResourceTypeEntity resourceTypeEntity) {
        if (resourceTypeEntity == null) {
            return ReturnStructure.NOT_FOUND();
        }
        return resourceTypeEntityService.addResourceTypeEntity(resourceTypeEntity);
    }

    /**
     * 通过资源类别实体id删除资源类别实体
     *
     * @param entityId 资源类别实体id
     * @return 删除结果信息
     */
    @ResponseBody
    @PostMapping("/deleteResourceTypeEntityByEntityId")
    public ReturnStructure deleteResourceTypeEntityByEntityId(@RequestParam("entityId") int entityId) {
        if (StringUtils.isBlank(entityId + "")) {
            return ReturnStructure.NOT_FOUND();
        }
        return resourceTypeEntityService.deleteResourceTypeEntityByEntityId(entityId);
    }

    /**
     * 通过资源类别实体id删除资源类别实体
     *
     * @param entityId 资源类别实体id
     * @return 删除结果信息
     */
    @ResponseBody
    @PostMapping("/markDeleteResourceTypeEntityByEntityId")
    public ReturnStructure markDeleteResourceTypeEntityByEntityId(@RequestParam("entityId") int entityId) {
        if (StringUtils.isBlank(entityId + "")) {
            return ReturnStructure.NOT_FOUND();
        }
        return resourceTypeEntityService.markDeleteResourceTypeEntityByEntityId(entityId);
    }


    /**
     * 通过资源类别实体id修改资源类别实体信息
     *
     * @param resourceTypeEntity 资源类别实体信息
     * @return 修改结果信息
     */
    @ResponseBody
    @PostMapping("/updateResourceTypeEntityByEntityId")
    public ReturnStructure updateResourceTypeEntityByEntityId(@RequestBody ResourceTypeEntity resourceTypeEntity) {
        if (resourceTypeEntity == null) {
            return ReturnStructure.NOT_FOUND();
        }
        LOGGER.info("资源类别实体信息为：{}", resourceTypeEntity);
        return resourceTypeEntityService.updateResourceTypeEntityByEntityId(resourceTypeEntity);
    }

    /**
     * 通过资源实体id修改资源实体状态
     *
     * @param resourceTypeEntity 实体信息
     * @return 更新结果
     */
    @ResponseBody
    @PostMapping("/updateResourceTypeEntityStatusById")
    public ReturnStructure updateResourceTypeEntityStatusById(@RequestBody ResourceTypeEntity resourceTypeEntity) {
        if (resourceTypeEntity == null || StringUtils.isBlank(resourceTypeEntity.getStatus()) || resourceTypeEntity.getResourceTypeEntityId()==0) {
            return ReturnStructure.NOT_FOUND();
        }
        return resourceTypeEntityService.updateResourceTypeEntityStatusById(resourceTypeEntity);
    }

    /**
     * 通过资源类别实体id获取资源类别实体信息
     *
     * @param entityId 资源类别实体id
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityByEntityId/{entityId}")
    public ReturnStructure getResourceTypeEntityByEntityId(@PathVariable("entityId") int entityId) {
        if (StringUtils.isBlank(entityId + "")) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息成功", resourceTypeEntityService.getResourceTypeEntityByEntityId(entityId));
    }

    /**
     * 通过资源类别英文名获取资源类别实体信息列表
     *
     * @param name 资源类别英文名
     * @return 获取资源类别实体信息列表结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityListByName/{name}")
    public ReturnStructure getResourceTypeEntityListByName(@PathVariable("name") String name) {
        if (StringUtils.isBlank(name)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityListByName(name));
    }

    /**
     * 通过资源类别英文名获取指定页资源实体信息列表
     *
     * @param pageData 分页信息列表
     * @param name 资源类别英文名
     * @return 获取资源实体分页信息列表结果
     */
    @ResponseBody
    @PostMapping("/getResourceEntityPageListByName/{name}")
    public ReturnStructure getResourceEntityPageListByName(@RequestBody PageData<ResourceTypeEntity> pageData, @PathVariable("name") String name) {
        if (StringUtils.isBlank(name)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源实体信息分页列表成功", resourceTypeEntityService.getResourceEntityPageListByName(pageData,name));
    }

    /**
     * 获取可以申请的实体资源列表
     *
     * @param resourceTypeEntity 查找条件
     * @return 实体列表
     */
    @ResponseBody
    @PostMapping("/getMayApplyEntityList")
    public ReturnStructure getMayApplyEntityList(@RequestBody ResourceTypeEntity resourceTypeEntity){
        if (resourceTypeEntity == null || StringUtils.isBlank(resourceTypeEntity.getResourceTypeName()) || !resourceTypeEntity.isMayApply()){
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取可申请资源实体列表成功",resourceTypeEntityService.getMayApplyEntityList(resourceTypeEntity));
    }

    /**
     * 通过资源类别名和状态获取资源实体列表
     *
     * @param name   资源类别名
     * @param status 状态
     * @return 资源实体列表
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityListByNameAndStatus/{name}/{status}")
    public ReturnStructure getResourceTypeEntityListByNameAndStatus(@PathVariable("name") String name, @PathVariable("status") String status) {
        if (StringUtils.isBlank(name) || StringUtils.isBlank(status)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityListByNameAndStatus(name, status));
    }

    /**
     * 获取资源类别实体信息列表
     *
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityList")
    public ReturnStructure getResourceTypeEntityList() {
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityList());
    }

    /**
     * 获取资源类别实体信息列表
     *
     * @param queryEntityListDto 查询条件dto
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @PostMapping("/queryResourceTypeEntityList")
    public ReturnStructure queryResourceTypeEntityList(@RequestBody QueryEntityListDto queryEntityListDto) {
        return ReturnStructure.SUCCESS("查询资源类别实体信息列表成功", resourceTypeEntityService.queryResourceTypeEntityList(queryEntityListDto));
    }

    /**
     * 获取资源类别实体信息分页列表
     *
     * @param queryEntityListDto 查询条件dto
     * @return 获取资源类别实体信息分页列表
     */
    @ResponseBody
    @PostMapping("/queryResourceEntityPageList")
    public ReturnStructure queryResourceEntityPageList(@RequestBody QueryEntityListDto queryEntityListDto) {
        return ReturnStructure.SUCCESS("查询资源实体信息分页列表成功", resourceTypeEntityService.queryResourceEntityPageList(queryEntityListDto));
    }

    /**
     * 通过资源类别实体创建人获取资源类别实体信息
     *
     * @param created 资源类别实体创建人
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityListByCreated/{created}")
    public ReturnStructure getResourceTypeEntityListByCreated(@PathVariable("created") String created) {
        if (StringUtils.isBlank(created)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityListByCreated(created));
    }

    /**
     * 通过资源类别实体最后一次修改人获取资源类别实体信息
     *
     * @param lastEdited 资源类别实体最后一次修改人
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityListByLastEdited/{lastEdited}")
    public ReturnStructure getResourceTypeEntityListByLastEdited(@PathVariable("lastEdited") String lastEdited) {
        if (StringUtils.isBlank(lastEdited)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityListByLastEdited(lastEdited));
    }

    /**
     * 通过资源类别英文名和资源类别实体创建人获取资源类别实体信息
     *
     * @param name    资源类别英文名
     * @param created 资源类别实体创建人
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityListByNameAndCreated/{name}/{created}")
    public ReturnStructure getResourceTypeEntityListByNameAndCreated(@PathVariable("name") String name, @PathVariable("created") String created) {
        if (StringUtils.isBlank(name) || StringUtils.isBlank(created)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityListByNameAndCreated(name, created));
    }

    /**
     * 通过资源类别英文名和资源类别实体最后一次修改人获取资源类别实体信息
     *
     * @param name       资源类别英文名
     * @param lastEdited 资源类别实体最后一次修改人
     * @return 获取资源类别实体信息结果
     */
    @ResponseBody
    @GetMapping("/getResourceTypeEntityListByNameAndLastEdited/{name}/{lastEdited}")
    public ReturnStructure getResourceTypeEntityListByNameAndLastEdited(@PathVariable("name") String name, @PathVariable("lastEdited") String lastEdited) {
        if (StringUtils.isBlank(name) || StringUtils.isBlank(lastEdited)) {
            return ReturnStructure.NOT_FOUND();
        }
        return ReturnStructure.SUCCESS("获取资源类别实体信息列表成功", resourceTypeEntityService.getResourceTypeEntityListByNameAndLastEdited(name, lastEdited));
    }

}
